/*  
 *  Copyright 2006 Paul Jack.
 *
 *  This file is part of the Dex compiler suite. 
 *  
 *  Dex is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU General Public License as published by the
 *  Free Software Foundation; either version 2 of the License, or (at your
 *  option) any later version.
 *  
 *  Dex is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 *  Public License for more details.
 *  
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
 */
package dex.compiler.parser;

import java.util.BitSet;

import dex.compiler.model.expression.Infix;


/**
 * Delimiters for operators.  Any character that isn't in one
 * of the operator symbols is regarded as a break.  Eg,
 * <code>' '</code>, <code>'('</code> and <code>'A'</code>
 * would all be considered breaks.
 */
public class SymbolBreaks implements Breaks {
	
	
	/**
	 * The singleton instance.
	 */
	final public static SymbolBreaks INSTANCE = new SymbolBreaks();

	
	/**
	 * The set of characters that make up operator symbols.
	 */
	private BitSet symbolChars;
	
	
	/**
	 * Builds a set of operator symbol characters.
	 * Private to enforce the singleton pattern.
	 */
	private SymbolBreaks() {
		super();
		symbolChars = new BitSet(128);
		for (String s : Infix.SYMBOLS) {
			for (int i = 0; i < s.length(); i++) {
				symbolChars.set(s.charAt(i));
			}
		}
	}


	/**
	 * Returns true if the given character is not an operator
	 * symbol character.
	 * 
	 * @return true  if the given character is not a symbol character
	 */
	public boolean isDelimiter(char ch) {
		return !symbolChars.get(ch);
	}

}
